package edu.client.IngenieriaService;

import java.util.Date;
import java.util.List;
import java.util.Set;

import com.google.gwt.user.client.rpc.AsyncCallback;

import edu.shared.DTO.ClaseEquipoPatronDTO;
import edu.shared.DTO.ClaseProductoDTO;
import edu.shared.DTO.ComponentePatronDTO;
import edu.shared.DTO.ElementoProductoDTO;
import edu.shared.DTO.EquipoPatronDTO;
import edu.shared.DTO.ListaDeMaterialesDTO;
import edu.shared.DTO.MaterialProductoDTO;
import edu.shared.DTO.MedidaFijaProductoDTO;
import edu.shared.DTO.MedidaVariableEstandarDTO;
import edu.shared.DTO.OrdenFabricacionGeneralDTO;
import edu.shared.DTO.OrdenPedidoDTO;
import edu.shared.DTO.ProductoDTO;
import edu.shared.DTO.ProveedorDTO;
import edu.shared.DTO.RenglonOrdenFabricacionGeneralDTO;
import edu.shared.DTO.RenglonOrdenPedidoDTO;
import edu.shared.DTO.SubclaseEquipoPatronDTO;


public interface IngenieriaServiceAsync {

	void buscarClasesEquipoPatron (AsyncCallback<List<ClaseEquipoPatronDTO>> callback) throws IllegalArgumentException;
	
	void buscarSubclasesEquipoPatron(int codigoClaseEquipoPatron, AsyncCallback<List<SubclaseEquipoPatronDTO>> callback) throws IllegalArgumentException;
	
	void buscarPlanosEquipoPatron(int codigoClaseEquipoPatron, int codigoSubclaseEquipoPatron, AsyncCallback<List<EquipoPatronDTO>> asyncCallback) throws IllegalArgumentException;
	
	void buscarEquiposPatron(AsyncCallback<List<EquipoPatronDTO>> asyncCallback) throws IllegalArgumentException;
	
	void buscarComponentesPatron(int codigoClaseEquipoPatron, int codigoSubclaseEquipoPatron, AsyncCallback<List<ComponentePatronDTO>> asyncCallback) throws IllegalArgumentException;
	
	void buscarPlanosComponentePatron(int codigoClaseEquipoPatron, int codigoSubclaseEquipoPatron, int codigoComponente, int codigoSubcomponente, AsyncCallback<List<ComponentePatronDTO>> asyncCallback);
	
	void buscarComponentesPatron(AsyncCallback<List<ComponentePatronDTO>> asyncCallback) throws IllegalArgumentException;
	
	void buscarUltimaVersionEquipoPatron(EquipoPatronDTO equipoPatronDTO, AsyncCallback<String> asyncCallback) throws IllegalArgumentException;
	
	void registrarEquipoPatron(EquipoPatronDTO equipoPatronDTO, AsyncCallback<EquipoPatronDTO> asyncCallback);

	void buscarClasesProducto(AsyncCallback<List<ClaseProductoDTO>> callback);

	void buscarElementosProducto(int codigoClase, AsyncCallback<List<ElementoProductoDTO>> callback);

	void buscarMaterialesProducto(AsyncCallback<List<MaterialProductoDTO>> callback);

	void buscarMedidasFijaProducto(AsyncCallback<List<MedidaFijaProductoDTO>> callback);

	void buscarProveedor(String nombre, AsyncCallback<ProveedorDTO> callback);

	void buscarEquiposPatronUltimaVersion(int codigoClase, int codigoSubclase, AsyncCallback<List<EquipoPatronDTO>> callback);

	void registrarProducto(ProductoDTO producto, AsyncCallback<Integer> callback);

	void registrarMedidasVariablesEstandar(int idProducto, List<MedidaVariableEstandarDTO> medidas, AsyncCallback<Boolean> callback);

	void registrarProveedorDeProducto(int idProducto, List<ProveedorDTO> proveedores, AsyncCallback<Boolean> callback);

	void buscarProductos(AsyncCallback<List<ProductoDTO>> callback);

	void buscarEquipoPatron(int codigoClase, int codigoSubclase, int plano, String version, AsyncCallback<EquipoPatronDTO> asyncCallback);
	
	void buscarProductos(int codigoClase, int codigoElemento, int codigoMaterial, AsyncCallback<List<ProductoDTO>> callback);

	void buscarProveedorCompleto(String nombre, AsyncCallback<ProveedorDTO> callback);

	void buscarProveedores(int idProducto, AsyncCallback<List<ProveedorDTO>> callback);
	void actualizarEquipoPatron(EquipoPatronDTO equipoPatronDTO, AsyncCallback<Boolean> asyncCallback);

	void eliminarProducto(int idProducto, AsyncCallback<Boolean> callback);

	void registrarEquipoPatronNuevoPlanoOVersion(EquipoPatronDTO equipoPatronBase, AsyncCallback<EquipoPatronDTO> asyncCallback);
	void buscarOrdenPedido(int numeroOrden, String nombreCliente, AsyncCallback<List<OrdenPedidoDTO>> callback);

	void eliminarEquipoPatron(String codigoEquipoSeleccionado, AsyncCallback<Boolean> asyncCallback);

	void registrarComponentePatron(ComponentePatronDTO componente, AsyncCallback<ComponentePatronDTO> asyncCallback);

	void buscarRenglonesOrdenPedido(int numeroOrden, AsyncCallback<List<RenglonOrdenPedidoDTO>> asyncCallback);
	
	void registrarOrdenFabricacion(OrdenFabricacionGeneralDTO ordenFabricacionDTO, AsyncCallback<Boolean> asyncCallback);

	void buscarComponentesPatronUltimaVersion(int codigoClase, int codigoSubclase, int codigoComponente, int codigoSubcomponente, AsyncCallback<List<ComponentePatronDTO>> callback);

	void buscarPlanosEquipoPatronActivosEInactivos(int codigoClase, int codigoSubclase, AsyncCallback<List<EquipoPatronDTO>> asyncCallback);

	void eliminarVersionEquipoPatron(String codigoVersionAnterior, AsyncCallback<Boolean> asyncCallback);

	void filtrarOrdenesFabricacion(String estado, Date fechaEstimadaInicio, Date fechaEstimadaFinalizacion, boolean pReservasYCompras, AsyncCallback<List<OrdenFabricacionGeneralDTO>> asyncCallback);

	void buscarRenglonesOrdenFabricacion(int nroOrdenFabricacion, AsyncCallback<Set<RenglonOrdenFabricacionGeneralDTO>> asyncCallback);

	void buscarMedidasFijasProducto(int codigoClase, int codigoElemento, int codigoMaterial, AsyncCallback<List<MedidaFijaProductoDTO>> asyncCallback);

	void buscarMaterialesProducto(int codigoClase, int codigoElemento, AsyncCallback<List<MaterialProductoDTO>> asyncCallback);

	void buscarEquiposPatronEnAlmacen(AsyncCallback<List<EquipoPatronDTO>> callback);

	void buscarComponentesPatronEnAlmacen(AsyncCallback<List<ComponentePatronDTO>> asyncCallback);

	void actualizarComponentePatron(ComponentePatronDTO componentePatron, AsyncCallback<Boolean> asyncCallback);

	void registrarComponentePatronNuevoPlanoOVersion(ComponentePatronDTO componentePatronBase, AsyncCallback<ComponentePatronDTO> asyncCallback);
	void buscarComponentePatron(int codigoClase, int codigoSubclase, String version, int codigoComponente, int codigoSubcomponente, int plano, AsyncCallback<ComponentePatronDTO> callback);

	void buscarListaMateriales(int idListaMateriales, AsyncCallback<ListaDeMaterialesDTO> callback);

	void registrarListaMateriales(ListaDeMaterialesDTO listaDeMaterialesDTO, AsyncCallback<Integer> callback);

	void actualizarCantidadEquipoPatron(int codigoClase, int codigoSubclase, int plano, String version, int cantidadDisponible, AsyncCallback<Integer> callback);

	void actualizarCantidadComponentePatron(int codigoClase, int codigoSubclase, String version, int codigoComponente, int codigoSubcomponente, int plano, int cantidadDisponible,
			AsyncCallback<Integer> callback);

	void eliminarVersionComponentePatron(String codigoVersionAnterior, AsyncCallback<Boolean> asyncCallback);

	void eliminarComponentePatron(String codigoComponenteSeleccionado, AsyncCallback<Boolean> asyncCallback);

	void buscarComponentesPatronUltimaVersionActivos(AsyncCallback<List<ComponentePatronDTO>> callback);

	void actualizarEstadoOrdenFabricacion(OrdenFabricacionGeneralDTO ordenFabricacionDTO, AsyncCallback<Void> callback);
	
	void registrarInventario(int idProducto, List<MedidaVariableEstandarDTO> medidas, AsyncCallback<Boolean> callback);
}
